package com.lanyan.system.service.impl;

import java.util.List;
import java.util.stream.Collectors;
        import com.lanyan.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.lanyan.common.utils.StringUtils;
import com.lanyan.system.mapper.SkuMapper;
import com.lanyan.system.domain.Sku;
import com.lanyan.system.domain.vo.SkuVo;
import com.lanyan.system.service.ISkuService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

/**
 * 规格Service业务层处理
 *
 * @author lanyan
 * @date 2024-11-26
 */
@Service
public class SkuServiceImpl  extends ServiceImpl<SkuMapper,Sku> implements ISkuService

{
    @Autowired
    private SkuMapper skuMapper;

    /**
     * 查询规格
     *
     * @param skuId 规格主键
     * @return 规格
     */
    @Override
    public Sku selectSkuBySkuId(Long skuId)
    {
        return this.getById(skuId);
    }

    /**
     * 查询规格Vo列表
     *
     * @param sku 规格
     * @return 规格
     */
    @Override
    public List<SkuVo> selectSkuVoList(Sku sku)
    {
        return selectSkuList(sku)
                .stream()
                .map(x -> (SkuVo)x)
                .collect(Collectors.toList());
    }
    /**
     * 查询规格列表
     *
     * @param sku 规格
     * @return 规格
     */
    @Override
    public List<Sku> selectSkuList(Sku sku)
    {
        LambdaQueryChainWrapper<Sku> wrapper = this.lambdaQuery().eq(Sku::getDelFlag,"0");
        if (sku.getProductId() != null) {
            wrapper.eq(Sku::getProductId, sku.getProductId());
        }
        if (sku.getSkuNameId() != null) {
            wrapper.eq(Sku::getSkuNameId, sku.getSkuNameId());
        }
        if (sku.getSkvValueId() != null) {
            wrapper.eq(Sku::getSkvValueId, sku.getSkvValueId());
        }
        if (StringUtils.isNotEmpty(sku.getImage())) {
            wrapper.eq(Sku::getImage, sku.getImage());
        }
        if (StringUtils.isNotEmpty(sku.getFullName())) {
            wrapper.like(Sku::getFullName, sku.getFullName());
        }
        if (sku.getMarketPrice() != null) {
            wrapper.eq(Sku::getMarketPrice, sku.getMarketPrice());
        }
        if (sku.getPrice() != null) {
            wrapper.eq(Sku::getPrice, sku.getPrice());
        }
        if (sku.getCost() != null) {
            wrapper.eq(Sku::getCost, sku.getCost());
        }
        if (sku.getStock() != null) {
            wrapper.eq(Sku::getStock, sku.getStock());
        }
        if (sku.getVolume() != null) {
            wrapper.eq(Sku::getVolume, sku.getVolume());
        }
        if (sku.getWeight() != null) {
            wrapper.eq(Sku::getWeight, sku.getWeight());
        }
        if (sku.getMarketPrice() != null) {
            wrapper.eq(Sku::getMarketPrice, sku.getMarketPrice());
        }
        if (StringUtils.isNotEmpty(sku.getMate())) {
            wrapper.eq(Sku::getMate, sku.getMate());
        }
        return wrapper.list();
    }

        /**
         * 新增规格
         *
         * @param sku 规格
         * @return 结果
         */
    @Override
        public boolean insertSku(Sku sku)
        {
                    sku.setCreateTime(DateUtils.getNowDate());
                return this.save(sku);
        }

        /**
         * 修改规格
         *
         * @param sku 规格
         * @return 结果
         */
    @Override
        public boolean updateSku(Sku sku)
        {
                    sku.setUpdateTime(DateUtils.getNowDate());
            return this.updateById(sku);
        }

        /**
         * 批量删除规格
         *
         * @param skuIds 需要删除的规格主键
         * @return 结果
         */
    @Override
        public boolean deleteSkuBySkuIds(Long[] skuIds)
        {
            return this.lambdaUpdate().set(Sku::getDelFlag,"1").in(Sku::getSkuId,skuIds).update();
        }

        /**
         * 删除规格信息
         *
         * @param skuId 规格主键
         * @return 结果
         */
    @Override
        public boolean deleteSkuBySkuId(Long skuId)
        {
            return this.lambdaUpdate().set(Sku::getDelFlag,"1").eq(Sku::getSkuId,skuId).update();
        }
    }
